package  main.java.leetcode.editor.cn;
//2022-11-24 13:54:45
//给你一个整数数组 nums 和两个整数：left 及 right 。找出 nums 中连续、非空且其中最大元素在范围 [left, right] 内的子数组
//，并返回满足条件的子数组的个数。 
//
// 生成的测试用例保证结果符合 32-bit 整数范围。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [2,1,4,3], left = 2, right = 3
//输出：3
//解释：满足条件的三个子数组：[2], [2, 1], [3]
// 
//
// 示例 2： 
//
// 
//输入：nums = [2,9,2,5,6], left = 2, right = 8
//输出：7
// 
//
// 
//
// 提示： 
//
// 
// 1 <= nums.length <= 10⁵ 
// 0 <= nums[i] <= 10⁹ 
// 0 <= left <= right <= 10⁹ 
// 
// Related Topics 数组 双指针 👍 269 👎 0

class NumberOfSubarraysWithBoundedMaximum {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new NumberOfSubarraysWithBoundedMaximum().new Solution();
        int[] nums = {73,55,36,5,55,14,9,7,72,52};
        solution.numSubarrayBoundedMax(nums,32,69);
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int numSubarrayBoundedMax(int[] nums, int left, int right) {
        int ans = 0;
        int fast = -1;
        int slow = -1;
        for(int i = 0;i<nums.length;i++){
            if(nums[i]>=left && nums[i]<=right){
                fast = i;
            }else if(nums[i]>right){
                slow = i;
                fast = -1;
            }
            if(fast != -1){
                ans += fast-slow;
            }
        }
        return ans;
//        int ans = 0;
//        for(int i = 0;i<nums.length;i++){
//            int temp = nums[i];
//            for(int j = i;j<nums.length;j++){
//                temp = Math.max(temp,nums[j]);
//                if(temp>=left && temp<=right){
//                    ans++;
//                }else {
//                    continue;
//                }
//            }
//        }
//        return ans;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
